package dao

import (
	"errors"
	"gorm.io/gorm"
	models "gorm_demo/pkg/models"
	"gorm_demo/pkg/mysql"
)

type VmInfoDao struct { }

func(VmInfoDao) List() (l []*models.VmInfo) {
	mysql.DefaultConnection().Order("id desc").Find(&l) 
	return
}

func(VmInfoDao) GetById(id int32) (*models.VmInfo, error) {
	var m models.VmInfo
	err := mysql.DefaultConnection().Where("id = ?", id).First(&m).Error
	if err != nil {
		if errors.Is(err, gorm.ErrRecordNotFound) {
			return nil, nil
		}
		return nil, err 
	}
	return &m, nil
}

func (VmInfoDao) Create(m models.VmInfo) (*models.VmInfo, error)  {
	err := mysql.DefaultConnection().Create(&m).Error
	if err != nil {
		return nil, err
	}
	return &m, nil
}

func (VmInfoDao) Update(m models.VmInfo, updates map[string]interface{}) (*models.VmInfo, error) {
	if len(updates) == 0 {
		return &m, nil
	}
	err := mysql.DefaultConnection().Model(&m).UpdateColumns(updates).Error
	if err != nil {
		return nil, err
	}
	return &m, nil
}

func (VmInfoDao) Delete(m models.VmInfo) error {
	return mysql.DefaultConnection().Delete(m).Error
}

